import { get, postWithQueryParams, postFormData } from "@/api/request";

/**
 * 文件控制器 / 文件控制器删除附件
 * @param {object} params
 * @param {object} data
 * @param {number} params.id 附件ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 方昊
 */
export function systemDeleteFile(params, data, config) {
  return postWithQueryParams("/system/deleteFile", params, data, config);
}

/**
 * 文件控制器 / 文件控制器下载文件
 * @param {object} params
 * @param {number} params.id 附件ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function systemDownloadFile(params, config) {
  return get("/system/downloadFile", params, config);
}

/**
 * 文件控制器 / 文件控制器预览文件
 * @param {object} params
 * @param {number} params.id 附件ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 方昊
 */
export function systemPreviewFile(params, config) {
  return get("/system/previewFile", params, config);
}

/**
 * 文件控制器 / 文件控制器上传文件
 * @param {object} data
 * @param {number} [data.directoryId] 目录id
 * @param {string} data.file 文件 binary
 * @param {number} [data.projectId] 项目id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<附件页面展示实体>>}
 * @author 方昊
 */
export function systemUploadFile(data, config) {
  return postFormData("/system/uploadFile", data, config);
}

/**
 * @typedef {object} 附件页面展示实体 附件页面展示实体
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {string} attachmentType 文件类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {number} id 主键
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 * @description 附件页面展示实体
 */
